package com.huike.web.controller.sysrole;

import com.baomidou.mybatisplus.extension.api.R;
import com.github.pagehelper.Page;
import com.huike.clues.domain.vo.SysRoleVO;
import com.huike.clues.service.ISysRoleService;
import com.huike.common.core.domain.entity.SysRoleDTO;
import com.huike.common.core.page.SystemParamsQuery;
import com.huike.common.result.PageResult;
import com.huike.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.method.P;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Description SysRoleController 角色数据管理
 * @Author kiloc
 * @Date 2023-10-2023/10/15
 */
@RequestMapping("system/role")
@Slf4j
@RequiredArgsConstructor
@RestController
@Api(tags = "角色信息相关接口")
public class SysRoleController {
    private final ISysRoleService iSysRoleService;

    /**
     * 处理分页查询角色列表接口
     *
     * @param queryPageBean 封装前端数据
     * @return 响应
     */
    @GetMapping("list")
    @ApiOperation("分页查询角色列表")
    public PageResult page
    (SystemParamsQuery queryPageBean) {

        log.info("分页查询角色列表接口:{}", queryPageBean);

        //调用业务层处理业务
        Page<List<SysRoleVO>> page
                = iSysRoleService.findAll(queryPageBean);

        //响应
        return PageResult.success(page.getTotal(), page.getResult());
    }

    /**
     * 处理新增角色接口
     *
     * @param sysRoleDTO 封装前端数据
     * @return 响应
     */
    @ApiOperation("新增角色")
    @PostMapping()
    public Result<String> add(@RequestBody SysRoleDTO sysRoleDTO) {

        log.info("新增角色接口:{}", sysRoleDTO);

        iSysRoleService.add(sysRoleDTO);

        return Result.success("新增角色成功");

    }

    /**
     * 根据角色id获取详细信息
     *
     * @param roleId
     * @return
     */
    @ApiOperation("根据角色id获取详细信息")
    @GetMapping("{roleId}")
    public Result<SysRoleVO> findByRoleId(@PathVariable Long roleId) {

        log.info("根据角色id获取详细信息");

        SysRoleVO sysRoleVO = iSysRoleService.findByRoleId(roleId);

        return Result.success(sysRoleVO);
    }

    /**
     * 修改保存角色
     *
     * @param sysRoleDTO
     * @return
     */
    @ApiOperation("修改保存角色")
    @PutMapping()
    public Result<String> update(@RequestBody SysRoleDTO sysRoleDTO) {

        log.info("修改保存角色:{}", sysRoleDTO);

        iSysRoleService.updateRole(sysRoleDTO);


        return Result.success("修改保存成功");
    }

    /**
     * 角色状态修改
     *
     * @param sysRoleDTO
     * @return
     */
    @ApiOperation("角色状态修改")
    @PutMapping("changeStatus")
    public Result<String> changeStatus(@RequestBody SysRoleDTO sysRoleDTO) {

        log.info("角色状态修改:{}", sysRoleDTO);

        iSysRoleService.changeStatus(sysRoleDTO);

        return Result.success("角色状态修改成功");
    }


    /**
     * 修改保存数据权限
     *
     * @param sysRoleDTO
     * @return
     */
    @ApiOperation("修改保存数据权限")
    @PutMapping("dataScope")
    public Result<String> dataScope(@RequestBody SysRoleDTO sysRoleDTO) {

        log.info("修改保存数据权限:{}", sysRoleDTO);

        iSysRoleService.updateRole(sysRoleDTO);

        return Result.success("修改保存数据权限成功");
    }

    /**
     * 删除角色
     *
     * @param roleIds
     * @return
     */
    @ApiOperation("删除角色")
    @DeleteMapping("{roleIds}")
    public Result<String> delete(@PathVariable List<Long> roleIds) {

        log.info("删除角色");

        iSysRoleService.daleteRole(roleIds);

        return Result.success("删除成功");
    }
}
